package com.heihei.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Protocol;

/**
 *  Redis配置类（读取配置文件的redis配置信息）
 *
 * @author duanhf
 * 2021年09月24日 16:17:27
 */
@Data
@Component
@ConfigurationProperties(prefix = "redis.config")
public class RedisConfigProperties {
    /** redis服务的ip地址，默认127.0.0.1 */
    private String host = "127.0.0.1";

    /** redis服务的端口号，默认6379 */
    private Integer port = 6379;

    /** redis认证密码，默认为空，即无密码 */
    private String password;

    /** 指定redis库，默认 0 */
    private Integer database = Protocol.DEFAULT_DATABASE;

    /** 超时时间，默认2000 */
    private Integer timeout = 2000;

    /** 连接池最大连接数（使用负值表示没有限制，默认8） */
    private Integer maxTotal = 8;

    /** 最大空闲数 */
    private Integer maxIdle = 8;

    /** 连接池最大阻塞等待时间（使用负值表示没有限制）/ 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 */
    private Integer maxWaitMillis = -1;

    /** 做空闲连接检测时，每次的采样数 / 每次释放连接的最大数目，默认-1表示无限制 */
    private Integer numTestsPerEvictionRun = -1;

    /** 空闲连接的检测周期，单位为毫秒 / 释放连接的扫描间隔（毫秒）， 默认30000 */
    private Integer timeBetweenEvictionRunsMillis = 30000;

    /** 连接的最小空闲时间，达到此值后空闲连接将被移除 */
    private Integer minEvictableIdleTimeMillis = 60000;

    /** 连接空闲多久后释放, 当空闲时间>该值&&空闲连接>最大空闲连接数=>直接释放，默认-1 */
    private Integer softMinEvictableIdleTimeMillis = -1;

    /** 向连接池借用连接时是否做连接有效性检测(Ping)无效连接将会被删除 / 在获取连接的时候检查有效性, 默认false */
    private Boolean testOnBorrow = false;

    /** 向连接池借用连接时是否做空闲检测，空闲超时的将会被移除 / 在空闲时检查有效性, 默认true */
    private Boolean testWhileIdle = true;

    /** 当连接池资源耗尽时，调用者是否需要等待。和maxWaitMillis对应，当它为true时，maxWaitMillis生效 / 连接耗尽时是否阻塞, false报异常,true阻塞直到超时, 默认true */
    private Boolean blockWhenExhausted = true;

    /** clientName */
    private String clientName;
}
